Redis 数据持久化RDB和AOF介绍

(1)RDB:对Redis的数据进行周期性的持久化

(2)AOF:对每一条写入指令作为日志,以append-only的模式写入到一个日志文件之中,在Redis重新启动的时候,可以通过AOF日志文件写入的指令来重新构建数据集

(3)可以通过RDB或AOF的形式,都可以将Redis内存中的数据持久化到硬盘上来,然后将这些数据备份到别的地方中去,比如阿里云,如果服务器上的数据挂了,并且内存和磁盘上的数据都丢失了,可以从云服务器中拷贝过来之前的数据,放在自定的目录,然后重新启动Redis,Redis就会自动根据持久化数据文件的数据,去恢复内存中的数据,继续对外提供服务。如果同时使用RDB和AOF两种机制持久化,那么Redis重启的时候,会使用AOF来重新构建数据,因为AOF之中的数据更加完整。

RDB文件持久化的优点

(1)RDB会生成多个文件,每一个数据文件中都代表了某一时刻Redis的数据,这种多个数据文件的方式,非常适合冷备份,可以将这些文件发送到阿里云上,以作备份

 (RDB做备份的优点:由Redis去控制固定时间长度的生成快照文件,比较方便,AOF,还需要自己写一写脚本去做定时)

(2)RBD对外提供读写的功能,影响非常的小,可以让Redis保持高性能,因为Redis主进程只需要一个fork子线程,让子线程去执行磁盘IO操作来进行RDB持久化即可

  RDB,每一次写,都是直接写Redis内存,只有在一定的时候,才会将数据写入磁盘中

  AOF,每一次写都是要写磁盘文件的,虽然可以写入OS cache之中,但是在一定的时间之内速度还是比RDB略慢一些。

(3)相对于AOF持久化机制来说,直接基于RDB的数据文件来重启和恢复Redis进程,速度更快

 AOF:存放的是指令日志,做数据恢复的时候,其实要执行回放和执行所有的日志文件,来恢复内存中的所有数据的
 RDB:就是一份数据文件,恢复的时候,直接加载到内存中即可。

RDB文件的缺点

(1)如果机器发生故障,那么RDB会导致丢失的数据更多

(2)RDB每次在子线程来执行RDB快照文件的时候,如果数据文件特别的大,会导致客户端提供的服务暂停数毫秒以至于数秒。

AOF数据持久化的优点

(1)AOF可以更好的保护数据不丢失,一般AOF会每隔一秒进行一次fsync操作,以保证OS cache中的数据写入磁盘

(2)AOF日志文件已append-only的方式写入,所以在没有任何磁盘寻址的开销,写入性能非常的高,而且文件也不容易破损,也很容易修复

(3)AOF文件即使过大的时候,也会进行后台重写操作,也不睡影响客户端的读写,因为在rewrite log的时候,会对其进行压缩,创建出一份需要恢复数据的最小日志出来,老的日志文件还是照常可以写入,当新的merge后的日志文件ready的时候,在交换新老日志文件即可

(4)AOF日志文件以非常可读的日志文件命令的方式进行记录,这个文件非常适合做灾难性的误删除的紧急恢复,比如默认flushall命令清空了所有数据,只要这个时候后台的rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条的flushall命令删除以后即可,然后通过恢复机制,自动恢复所有的数据。

AOF持久化的缺点

(1)对于同一份数据来说,AOF文件通常比RDB文件大的多

(2)AOF开启之后,支持的QPS会比RDB低的很多,因为AOF一般会配置为每一秒fsync一次日志文件,当然,每一秒一次的fsync,性能也是很高的,如果你想保证每一条数据都不丢失,也是可以的,AOF的fsync设置为每写入一条数据,fsync一次,Redis的性能会大大降低。

(3)BUG较多

(4)唯一比较大的缺点就是,数据恢复的时候,会比较慢,还要做冷备份,定期的备份又不太方便

RDB和AOF如何选择

(1)不要仅仅使用RDB,因为那样会让你丢失很多的数据

(2)也不要仅仅使用AOF,因为RDB做冷备份数据更快,恢复数据也更快,而且bug更少

(3)综合使用AOF和RDB两种备份数据


雨露
98 声望16 粉丝